package com.lance.answer.question_answer.tmp;

import com.lance.answer.gui.answer.AnswerObject;
import com.lance.answer.gui.answer.Util;
import com.lance.answer.util.Constant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;


/**
 * 解决话题讨论的问题
 */
@Slf4j
public class QuestionAnswerTmp1 {

    /**
     * 进度表：
     * 6-18 19:55开始测试 公共行政学 行政管理专科
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        //学科中文名
      //  String subjectName = "公共行政学";
        String subjectName = "行政组织学";
        //专业中文名
        String majorName = "行政管理专科20秋";
        //并发开启的浏览器数量
        int sync = 10;
        //是否提交答案
        boolean commit = false;
        //驱动路径
        String driverPath = null;

        //初始化日志配置
        Constant.initLog();
        //开启任务
        start(subjectName, majorName, sync, driverPath, commit);
    }

    public static void start(String subjectName, String majorName, int sync, String driverPath, boolean commit) throws Exception {
        //获取模板路径,通过流的方式获取文件可以避免被打成jar包之后无法获取文件路径的异常


        InputStream inputStream2 = Thread.currentThread().getContextClassLoader().getResourceAsStream(subjectName + "/" + "users/" + majorName + ".user");
        List<String> users = IOUtils.readLines(inputStream2, "utf-8");

        InputStream inputStream3 = Thread.currentThread().getContextClassLoader().getResourceAsStream(subjectName + "/" + subjectName + "-quiz.section");
        List<String> list1 = IOUtils.readLines(inputStream3);
        List<String> paths = new ArrayList<>();


        paths.add("http://xinjiang.ouchn.cn/mod/forum/view.php?id=269795");

        // FENGX
//        for (String str : list1) {
//            paths.add(str.split(",")[0].trim());
//        }
        // FENGX

        List<List<String>> group = new ArrayList<>();
        int size = users.size();
        int step = size / sync;
        if (step == 0) {
            group.add(users);
        } else {
            for (int i = 0; i < sync; i++) {
                List<String> list2 = users.subList(step * i, (i + 1) * step);
                group.add(list2);
            }
            group.add(users.subList(step * sync, users.size()));
        }
        for (List<String> batchUser : group) {
            Constant.THREAD_POOL_BATCH.execute(() -> {
                try {
                    for (String user : batchUser) {
                        String[] strs = user.split(",");
                        String userCode = strs[0];
                        String pwd = strs[1].substring(6, 14);
                        pwd = "Ouchn"+pwd;
                        run(paths, null, subjectName, driverPath, userCode, pwd, commit);
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });

        }


    }


    // 管理学基础 2065001457555 19940419
    public static void run(List<String> urlTasks, Map<String, AnswerObject> answers, String subjectName, String driverPath, String userName, String password, boolean commit) throws Exception {
        WebDriver driver = Util.getDriver(driverPath);
        //String url = "http://student.ouchn.cn/";
        String url = "http://passport.ouchn.cn/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3Dstudentspace%26redirect_uri%3Dhttp%253A%252F%252Fstudent.ouchn.cn%252F%2523%252Fsignin-oidc%2523%26response_type%3Did_token%2520token%26scope%3Dopenid%2520profile%2520ouchnuser%2520ouchnstudentspaceapi%2520offline_access%26state%3Dca1cb5d0270b49fdaea508b8a846c457%26nonce%3Dd257df51b0a141ac8ed35b1caf59ef4c";
        driver.get(url);
        Thread.sleep(3000);
        //Util.login(driver, "2065001457555", "19940419");
        Util.login(driver, userName, password);
        Util.switchToFirst(driver);
        Thread.sleep(3000);
        // 形考作业的链接 管理学
        //List<String> urlTasks = Util.getCourseTaskUrl(driver, CourseTypeEnum.BasicManagement.name);
        //List<String> urlTasks = Util.getCourseTaskUrl(subjectCode);

        //chromeDriver.navigate().refresh();
        for (WebElement we : driver.findElements(By.className("media-body"))) {
            Util.switchToFirst(driver);
            // 找到管理学基础
            String mediaTitle = we.findElement(By.className("media-title")).getText();

            if (!mediaTitle.contains(subjectName)) {
                continue;
            }
            //点击进入学习的按钮
            WebElement studyButton = we.findElement(By.cssSelector("button[class='btn bg-primary']"));
            studyButton.click();
            //Util.switchToLast(driver);
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println(urlTasks.toString());
        for (String urlTask : urlTasks) {
            // FIXME 当完成第一份形考任务时，必须提交，否则会弹出 ”是否保存当前页面“消息
            driver.get(urlTask);
            Thread.sleep(2 * 1000);
            // 点击继续作业

            try {
                WebElement doWorkArea = driver.findElement(By.cssSelector("*[class='btn btn-primary']"));
                doWorkArea.click();



                String title ="广场舞引发的矛盾的思考题-";
                try {
                    WebElement my = driver.findElement(By.cssSelector("span[class='usertext mr-1']"));
                    title = title+my.getText();
                }catch (Exception e){

                }
                String answer = "1.公共利益是指不特定的社会成员所享有的利益。各国立法基本上都没有对公共利益进行精确的定义，而只是采取了抽象概括的方式来规定，究其原因，乃是不得已而采取的方式。因为公共利益的最大特点在于，它是一个与诚实信用、公序良俗等相类似的框架性概念，具有高度的抽象性和概括性。正因为如此，执法者在行使公权力的过程中，可以根据社会生活发展和变化的情况来维护某一种具体的公共利益，实现社会实质的公平和正义。此外，正是由于这种抽象性和概括性，通过公共利益条款能够赋予法官一定的自由裁量权，公平地处理案件，克服成文法所可能具有的滞后性。在公共利益面前，“小团体”的自由必须受到约束。城市管理应该改变相关法律法规缺失、执行者缺位的现状，加强对群众性娱乐活动的管理和引导，帮助参与者提高文明素质和公德意识，为公众创造安宁和谐的城市生活环境。广场舞伴随城市发展而来，是文化现象，也是社会现象。广场舞曾经是精神文明建设的一个成果，是社会和谐的反映，但随着城市人口密度不断加大，以及公众对居住环境要求的提高，广场舞噪声已开始对居民生活和社区秩序造成较大影响。在公共利益面前，“小团体”的自由必须受到约束。城市管理应该改变相关法律法规缺失、执行者缺位的现状，加强对群众性娱乐活动的管理和" +
                        "引导，帮助参与者提高文明素质和公德意识，为公众创造安宁和谐的城市生活环境2.(1).政府部门尽快出台相关管理办法，落实管理部门，明确管理措施和责任。(2)按规定时间统-播放，严格控制音量(不超过80Db)和播放时间(不超过晚九点半)，规定每个广场只能播放一台音响。(3)尽快把群众文化健身广场建设纳入新的城镇建设规划，作统一合理的安排，避免类似矛盾的出现。(4)社区居委会和街镇文体服务中心要定期组织培训，或组织“街舞”、“健身舞”比赛，进行有效的引导，使舞蹈样式和曲目相对积极向上，有益于身心健康。";



                driver.findElement(By.id("id_subject")).sendKeys(title);
                Thread.sleep(2000);
                WebElement iframe = driver.findElement(By.id("id_message_ifr"));
                String js = "document.getElementById('"+iframe.getAttribute("id")+"').contentWindow.document.body.innerText = '"+answer+"'";
                System.err.println(js);
                ((JavascriptExecutor)driver).executeScript(js);
              //  Thread.sleep(200000);
                driver.findElement(By.id("id_submitbutton")).click();
            } catch (Exception e) {
                System.err.println("taskUrl:" + urlTask + "  occur error");
                e.printStackTrace();
                Thread.sleep(2000000);
            }
            //回到试题首页
            TimeUnit.SECONDS.sleep(2);
        }

        Thread.sleep(2000);
        driver.close();
        driver.quit();
    }




}
